# 动物类
class Animal(object):
    """动物类"""
    def func(self):
        print('动物发出了声音')

# 动物类中的猫类
class Cat(Animal):
    """猫类"""
    def func(self):
        print('喵 喵 喵')

# 动物类中的狗类
class Dog(Animal):
    """狗类"""
    def func(self):
        print('汪 汪 汪 ')


# 英雄类
class Hero:
    def func(self):
        print('这个是英雄类的方法，不是动物类的对象')


# 定义一个方法 暂时不知道
def work01(Animal):
    Animal.func() # Dog().func()


# asd = Animal()
work01(Animal())  # 传入的对象
# 传入不同的对象，产生不同的结果
# 调用灵活 更容易编写出通用的代码


class Duck:
    def quack(self):
        print("嘎嘎嘎嘎。。。。。")

class Bird:
    def quack(self):
        print("bird imitate duck....")

class geese: # 天鹅
    def quack(self):
        print("geese imitate duck....")


# 方法名
def asd(duck):
    duck.quack()


duck = Duck()
bird = Bird()
geese = geese()
# in_the_forest(geese)
for x in [duck, bird, geese]:
    asd(x)

# 计算长度的
# 可迭代对象
print(len('123'))
print(len([1,2,3,4,5]))
print(len((1,2,3,4,5)))
